#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <stdio.h>
#include <stdlib.h>
#include "ArbreBinaire.h"
#include "SDLDraw.h"
#include "main.h"

SDL_Surface* initSDLWindow() {
    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);

    SDL_Surface* screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);

    if (screen == NULL) {
    	fprintf(stderr, "Impossible d'initialiser le mode vidéo : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    SDL_FillRect(screen, NULL, 0x00ffffff);

    SDL_Flip(screen);

    SDL_WM_SetCaption("Projet IPA", NULL);

    return screen;
}

void initSDLTTF() {
	TTF_Init();
	atexit(TTF_Quit);
}


int main(int argc, char **argv)
{
	arbre racine = NULL;
	
	SDL_Surface* screen = initSDLWindow();

	SDL_Flip(screen);

	initSDLTTF();

	char bufferReponse[255];

	system("clear");

	int stop = 0;
	while (!stop) {
		printf("Vous souhaitez :\n    1. Insérer un sommet\n    2. Supprimer un sommet\n    9. Quitter\n>");
		fflush(stdout);

		char bufferReponse[255];

		scanf("%s", bufferReponse);
		int reponse = atoi(bufferReponse);

		switch (reponse) {
			// Insertion d'un sommet
			case 1:
				while (1) {
					printf("Lettre du sommet à insérer :\n>");
					fflush(stdout);

					scanf("%s", bufferReponse);
					char sommet = bufferReponse[0];

					if (strlen(bufferReponse) > 1 || ((sommet < 'a' || sommet > 'z') && (sommet < 'A' || sommet > 'Z'))) {
						system("clear");

						printf("Veuillez entrer une lettre\n");

						break;
					}

					arbre arbreDejaExistant = rechercherArbre(racine, sommet);

					if (arbreDejaExistant != NULL) {
						system("clear");

						printf("Un sommet du même nom existe déjà\n");

						break;
					}

					printf("Valeur du sommet à insérer :\n>");
					fflush(stdout);

					scanf("%s", bufferReponse);
					int valeur = atoi(bufferReponse);		

					char bufferComparaison[255];
					sprintf(bufferComparaison, "%d", valeur);

					if (strcmp(bufferComparaison, bufferReponse) != 0) {
						system("clear");

						printf("Veuillez entrer un entier\n");

						break;
					}

					arbre arbreInsertion = creerArbre(sommet, valeur, screen);
					racine = insererArbre(racine, arbreInsertion);

					system("clear");

					printf("Sommet inséré\n", sommet);

					break;
				}

				break;
			// Suppression d'un sommet
			case 2:
				while (1) {
					printf("Lettre du sommet à supprimer :\n>");
					fflush(stdout);

					scanf("%s", bufferReponse);
					char sommet = bufferReponse[0];

					arbre arbreTrouve = rechercherArbre(racine, sommet);

					if (arbreTrouve == NULL) {
						system("clear");

						printf("Sommet non trouvé\n", sommet);

						break;
					}
					else {
						supprimerArbre(racine, arbreTrouve);

						system("clear");

						printf("Sommet supprimé\n", sommet);

						break;
					}
				}

				break;
			case 9:
				stop = 1;

				break;
			default:
				system("clear");

				printf("Effectuez un choix valide\n");

				break;
		}
	}

	return EXIT_SUCCESS;
}